from fastapi import FastAPI, UploadFile, File
from fastapi.responses import JSONResponse
import os
import sys

from starlette.middleware.cors import CORSMiddleware

'''
这是FastAPI应用的主入口点，提供了一个上传文件的端点，用于处理QA文件并运行相关的数据处理脚本。
'''
# 添加当前目录到Python路径
sys.path.append(os.path.dirname(os.path.abspath(__file__)))

# 直接导入必要的模块
import QAImport
import tableToA
import Neo4jDocumentConnector

app = FastAPI()
# ------------------- 添加 CORS 中间件 -------------------
app.add_middleware(
    CORSMiddleware,
    allow_origins=["*"],  # 允许所有来源，生产环境建议改为具体域名，如 ["http://localhost:3000"]
    allow_credentials=True,
    allow_methods=["*"],  # 允许所有方法（GET, POST, PUT, DELETE, OPTIONS 等）
    allow_headers=["*"],  # 允许所有头部
)
# -------------------------------------------------------
@app.post("/upload")
async def process_qa_file(file: UploadFile = File(...)):
    try:
        # 保存上传的文件
        file_location = f"./{file.filename}"
        with open(file_location, "wb+") as file_object:
            file_object.write(await file.read())
        
        # 运行QAImport
        print("正在运行QAImport...")
        QAImport.process_qa_file(file_location)  #演示时屏蔽
        
        # 运行tableToA
        print("正在运行tableToA...")
        tableToA.main()
        
        # 运行Neo4jDocumentConnector
        print("正在运行Neo4jDocumentConnector...")
        Neo4jDocumentConnector.connect_similar_documents()
        
        # 删除临时文件
        os.remove(file_location)
        
        return JSONResponse(status_code=200, content={"message": "处理完成"})
    except Exception as e:
        return JSONResponse(status_code=500, content={"error": str(e)})

if __name__ == "__main__":
    import uvicorn
    uvicorn.run(app, host="0.0.0.0", port=8000)